我有一个以下格式的文本文件:
Name Place Mobile Jon Sam India 1234567890 Barack Obama USA 0987654321
每个字段由制表符空格分隔.我想通过shell脚本提取每个字段.我使用以下代码:
while IFS= read -r var; do echo $var | awk -F"\t" '{print $1,"->"$2,"->"$3}' done < myfile
我期待以下风格的输出:
Jon Sam->India->1234567890
但它打印如下:
Jon Sam India 1234567890-> ->
这意味着,不会发生分裂.我的计划有什么问题?
当你在bash中拥有完美的格式化工具时,使用awk进行格式化似乎很浪费.
while IFS=$'\t' read -r var1 var2 var3; do printf "%s->%s->%s\n" "$var1" "$var2" "$var3" done < myfile
或者,如果你真的想在事后拆分这条线:
while IFS= read -r line; do IFS=$'\t' read -r -a arr <<<"$line" printf "%s->%s->%s\n" "${arr[@]}" done < myfile
当然,awk毫不费力地做了这样的事情:
awk -F"\t" '{ printf "%s->%s->%s\n",$1,$2,$3 } ' myfile
甚至
awk -F"\t" -v OFS="->" '{ $1=$1 } 1' myfile