我有一个以下格式的文本文件:
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)
这意味着,不会发生分裂.我的计划有什么问题?
当你在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)