使用awk在shell脚本中按选项卡拆分字符串不起作用

Ans*_*imu 2 bash shell awk

我有一个以下格式的文本文件:

Name           Place     Mobile
Jon Sam        India     1234567890
Barack Obama   USA       0987654321
Run Code Online (Sandbox Code Playgroud)

每个字段由制表符空格分隔.我想通过shell脚本提取每个字段.我使用以下代码:

while IFS= read -r var; do 
    echo $var | awk -F"\t" '{print $1,"->"$2,"->"$3}'
done < myfile
Run Code Online (Sandbox Code Playgroud)

我期待以下风格的输出:

Jon Sam->India->1234567890
Run Code Online (Sandbox Code Playgroud)

但它打印如下:

Jon Sam India 1234567890-> ->
Run Code Online (Sandbox Code Playgroud)

这意味着,不会发生分裂.我的计划有什么问题?

gho*_*oti 5

当你在bash中拥有完美的格式化工具时,使用awk进行格式化似乎很浪费.

while IFS=$'\t' read -r var1 var2 var3; do
    printf "%s->%s->%s\n" "$var1" "$var2" "$var3"
done < myfile
Run Code Online (Sandbox Code Playgroud)

或者,如果你真的想在事后拆分这条线:

while IFS= read -r line; do
    IFS=$'\t' read -r -a arr <<<"$line"
    printf "%s->%s->%s\n" "${arr[@]}"
done < myfile
Run Code Online (Sandbox Code Playgroud)

当然,awk毫不费力地做了这样的事情:

awk -F"\t" '{ printf "%s->%s->%s\n",$1,$2,$3 } ' myfile
Run Code Online (Sandbox Code Playgroud)

甚至

awk -F"\t" -v OFS="->" '{ $1=$1 } 1' myfile
Run Code Online (Sandbox Code Playgroud)