我有一个文件,其中包含与此类似的各种行数。
05ALBUZZI CLAUDIA MARIA LBZCDM64M53F205R 236.41 197.01 6.70
我的目标是,通过主要使用 awk 和 sed,来:
从第一列中删除前两个字符(因此在本例中为 05),并将它们放到它自己的列中,位于第一列之前
用 ; 分隔所有列,同时保持包含空格的字段(在本例中,第二列上的名称字段的名称为 Claudia Maria)完好无损,并且不将它们分成两列
最后,获取所有利润超过1500的代理商线路(利润显示在最后三列,利润为三列之和)
我一直在尝试首先使用以下命令选择前两个字符:
awk 'FS="\t" { $0 = substr($1, 3) } 1' Agenti.txt
awk 'NR>1 {print $2}' Agenti.txt
但我得到的结果好坏参半。但由于在其余练习中解决这个问题至关重要,因此我发现基本上不可能从这里继续。
我看到你的尝试之一:
awk 'FS="\t" { $0 = substr($1, 3) } 1' Agenti.txt
正在尝试将
FS
设置为选项卡,因此我假设您的输入是制表符分隔的。
只是逐步实现您的目标...
从第一列中删除前两个字符(所以在这个 案例,05)并将它们带到它自己的列上,在列之前 一个
$ mv file Agenti.txt
$ cat tst.awk
BEGIN { FS=OFS="\t" }
{
sub(/../,"&"FS)
print
}
$ awk -f tst.awk Agenti.txt
05 ALBUZZI CLAUDIA MARIA LBZCDM64M53F205R 236.41 197.01 6.70
用 ; 分隔所有列,同时保留包含空格的字段 (对于本示例,第二列上的名称字段的名称为 Claudia Maria)完好无损,并且没有将它们分成两列
$ cat tst.awk
BEGIN { FS="\t"; OFS=";" }
{
sub(/../,"&"FS)
$1 = $1
print
}
$ awk -f tst.awk Agenti.txt
05;ALBUZZI;CLAUDIA MARIA;LBZCDM64M53F205R;236.41;197.01;6.70
最后,获得所有利润超过的代理商的线路 1500(利润显示在最后三列,利润是 三列之和)
$ cat tst.awk
BEGIN { FS="\t"; OFS=";" }
{
sub(/../,"&"FS)
$1 = $1
profit = $(NF-2) + $(NF-1) + $NF
}
profit > 1500
$ awk -f tst.awk Agenti.txt
$