我发现很难调试我的 shell 脚本。我有以下文件 test.csv
The Gardens,Gard (AUS),AEST,NSW,,Sandown Park,SPrk (AUS),AEST,VIC,,Grade 5,GR5,
Wentworth Park,WPrk (AUS) ,AEST,NSW,,The Meadows,Mead (AUS),AEST,VIC,,Juvenille,JUV,
Angle Park,AnPk (AUS),ACST,SA,,Warragul,Wgul (AUS),AEST,VIC,,,,
WPrk (AUS) 有一个额外的尾随空白,我想修剪然后打印。运行
awk -F\, 'gsub(/[ \t]+$/, "", $2); {print $2 ":"}' test.csv
生产
Gard (AUS):
Wentworth Park WPrk (AUS) AEST NSW The Meadows Mead (AUS) AEST VIC Juvenille JUV
WPrk (AUS):
AnPk (AUS):
这是我想要的,除了第二行我不知道为什么会出现
最佳答案
awk -F\, 'gsub(/[ \t]+$/, "", $2); {print $2 ":"}' test.csv
由于您在任何操作 block ({...}
) 之外都有 gsub
,因此每行都会对其进行评估作为条件。它返回它所做的替换次数,因此它将在大多数输入上返回 0,但在您要更改的行上返回 1。由于没有伴随它的 Action ,默认 Action 被执行,打印该行;这就是为什么要打印整行的原因。
正如其他人所说,解决方法是将 gsub
调用放在操作 block 中。
(还有,为什么是 \,
?逗号在 shell 中不是特殊字符。)
关于linux - 为什么我的 awk 命令多打印一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9985909/