用awk交换两列

Fdv*_*Fdv 3 awk sed

我尝试在文本文件中交换两列,字段分隔符是管道'|' 标志.

我发现并尝试过

awk ' { t = $1; $1 = $2; $2 = t; print; } ' input_file
Run Code Online (Sandbox Code Playgroud)

当字段分隔符是选项卡时,它可以工作.

我也试过了

awk -F\|  '{print $2 $1 }' input_file
Run Code Online (Sandbox Code Playgroud)

但我没有设法指定'|' 作为输出字段分隔符.

fed*_*qui 5

您需要定义OFS,输出字段分隔符.您可以使用以下任一方式执行此操作:

awk 'BEGIN{FS=OFS="|"} {t=$1; $1=$2; $2=t; print} ' input_file
Run Code Online (Sandbox Code Playgroud)

要么

awk -v OFS="|" -v FS="|" ' {t=$1; $1=$2; $2=t; print} ' input_file
Run Code Online (Sandbox Code Playgroud)

或者(感谢Jaypal!)

awk '{t=$1; $1=$2; $2=t; print}' OFS="|" FS="|" input_file
Run Code Online (Sandbox Code Playgroud)

  • 听起来像[english.stackexchange.com](http://english.stackexchange.com/)的问题.=) (2认同)