rmb*_*rmb 17 awk text-processing
我试图通过使用将我的 csv 文件的第 7 列移到最后
awk -F '{print $1,$2,$3,$4,$5,$6,$8,$9,$10,$11,$7}',OFS= "$file"
Run Code Online (Sandbox Code Playgroud)
其中 $file 是目录中的 .csv 文件。然而,输出是
awk: ^ syntax error
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个错误?
Jay*_*got 14
该-F
选项需要一个参数(字段分隔符):-F,
例如。
awk
脚本的结尾必须用(空格字符)与其余参数分隔。
如果字段分隔符是,
并且您希望保留它,并且列数是常量且小于或等于 11,请尝试以下操作:
awk -F, '{print $1,$2,$3,$4,$5,$6,$8,$9,$10,$11,$7}' OFS=, "$file"
Run Code Online (Sandbox Code Playgroud)
如果您的字段分隔符是分号,请不要忘记将其设置在引号中
awk -F, '{print $1,$2,$3,$4,$5,$6,$8,$9,$10,$11,$7}' OFS=, "$file"
Run Code Online (Sandbox Code Playgroud)
更短的解决方案是
awk -F',+' -v OFS=, '{$(NF+1)=$7; $7=""; $0=$0; $1=$1}1' file
Run Code Online (Sandbox Code Playgroud)
我不确定是否,+
适用于所有awk
版本,但至少适用于 GNU awk,也适用于-c
兼容模式。
解释:
$(NF+1)=$7
:首先我们将第 7 个字段添加到行尾($12=$7
在这种情况下可能是)$7=""
:在下一步中,第 7 个字段被擦除(但周围的分隔符保留)$0=$0
)将多个逗号视为字段分隔符(这是通过 完成的-F',+'
,这里+
表示一次或多次),并且还重新排列当前记录通过$1=$1
使用先前设置的输出字段强制重建行分隔符(由选项设置-v OFS=,
)1
示例输入:
1,2,3,4,5,6,7,8,9,10,11
Run Code Online (Sandbox Code Playgroud)
输出
1,2,3,4,5,6,8,9,10,11,7
Run Code Online (Sandbox Code Playgroud)
如果您使用 打印OFS=
,则字段之间没有分隔符,您可以简单地将 的值保存$7
在一个变量中,设置$7
为空并直接打印行和变量。您不需要指定所有字段:
$ cat file
1,2,3,4,5,6,7,8
$ awk -F, -vOFS= '{k=$7; $7=""; print $0,k}' file
12345687
Run Code Online (Sandbox Code Playgroud)