Bash Shell:如何右对齐我的文件的列
我有一个如下所示的数据文件:Bash Shell:如何右对齐我的文件的列,bash,shell,awk,printf,Bash,Shell,Awk,Printf,我有一个如下所示的数据文件: Jones,Bill,235 S. Williams St.,Denver,CO,80221,(303) 244-7989 Smith,Tom,404 Polk Ave.,Los Angeles,CA,90003,(213) 879-5612 我希望每一行用“,”和右对齐列分隔,如下所示 Jones Bill 235 S. Williams St. Denver CO 80221 (303) 244-7989 S
Jones,Bill,235 S. Williams St.,Denver,CO,80221,(303) 244-7989
Smith,Tom,404 Polk Ave.,Los Angeles,CA,90003,(213) 879-5612
我希望每一行用“,”和右对齐列分隔,如下所示
Jones Bill 235 S. Williams St. Denver CO 80221 (303) 244-7989
Smith Tom 404 Polk Ave. Los Angeles CA 90003 (213) 879-5612
这是我的代码,它不工作。请帮忙,谢谢
while read line
do
echo "$line" | awk -F, '{for(i=1;i<=NF;i++)printf "%15s" $i}'
echo
done < "datafile.txt"
读取行时
做
echo“$line”| awk-F,{for(i=1;i您不应该使用循环将每一行传输到awk。循环速度慢,会降低可读性(请查看)。默认情况下,awk读取行,只需提供文件名作为参数:
awk -F, '{for(i=1;i<=NF;i++){printf "%22s",$i};print ""}' datafile.txt
awk-F,'{for(i=1;i您不应该使用循环将每一行传输到awk。循环速度慢,会降低可读性(请查看)。默认情况下,awk读取行,只需提供文件名作为参数:
awk -F, '{for(i=1;i<=NF;i++){printf "%22s",$i};print ""}' datafile.txt
awk-F'{for(i=1;iawk本身有for
循环。使用shellfor
循环也可以工作
$ cat file
Jones,Bill,235 S. Williams St.,Denver,CO,80221,(303) 244-7989
Smith,Tom,404 Polk Ave.,Los Angeles,CA,90003,(213) 879-5612
$ awk -F, '{ for (i=1; i<=NF; i++) printf("%20s", $i); printf "\n"; }' file
Jones Bill 235 S. Williams St. Denver CO 80221 (303) 244-7989
Smith Tom 404 Polk Ave. Los Angeles CA 90003 (213) 879-5612
$
$ while read line; do echo "$line" | awk -F, '{ for (i=1; i<=NF; i++) printf("%20s", $i); printf "\n"; }'; done < file
Jones Bill 235 S. Williams St. Denver CO 80221 (303) 244-7989
Smith Tom 404 Polk Ave. Los Angeles CA 90003 (213) 879-5612
$
$cat文件
琼斯,比尔,科罗拉多州丹佛市S.威廉姆斯街235号,邮编80221,(303)244-7989
史密斯,汤姆,加利福尼亚州洛杉矶波尔克大道404号,90003,(213)879-5612
$awk-F,'{for(i=1;iawk本身有for
循环。使用shellfor
循环也可以工作
$ cat file
Jones,Bill,235 S. Williams St.,Denver,CO,80221,(303) 244-7989
Smith,Tom,404 Polk Ave.,Los Angeles,CA,90003,(213) 879-5612
$ awk -F, '{ for (i=1; i<=NF; i++) printf("%20s", $i); printf "\n"; }' file
Jones Bill 235 S. Williams St. Denver CO 80221 (303) 244-7989
Smith Tom 404 Polk Ave. Los Angeles CA 90003 (213) 879-5612
$
$ while read line; do echo "$line" | awk -F, '{ for (i=1; i<=NF; i++) printf("%20s", $i); printf "\n"; }'; done < file
Jones Bill 235 S. Williams St. Denver CO 80221 (303) 244-7989
Smith Tom 404 Polk Ave. Los Angeles CA 90003 (213) 879-5612
$
$cat文件
琼斯,比尔,科罗拉多州丹佛市S.威廉姆斯街235号,邮编80221,(303)244-7989
史密斯,汤姆,加利福尼亚州洛杉矶波尔克大道404号,90003,(213)879-5612
$awk-F'{(i=1;i带列和rev
:
$ rev file | column -ts, | rev
Jones Bill 235 S. Williams St. Denver CO 80221 (303) 244-7989
Smith Tom 404 Polk Ave. Los Angeles CA 90003 (213) 879-5612
或使用GNU列
(用于-R
)和序列
:
$ column -ts, -R $(seq -s, 999) file
Jones Bill 235 S. Williams St. Denver CO 80221 (303) 244-7989
Smith Tom 404 Polk Ave. Los Angeles CA 90003 (213) 879-5612
带有列
和修订版
:
$ rev file | column -ts, | rev
Jones Bill 235 S. Williams St. Denver CO 80221 (303) 244-7989
Smith Tom 404 Polk Ave. Los Angeles CA 90003 (213) 879-5612
或使用GNU列
(用于-R
)和序列
:
$ column -ts, -R $(seq -s, 999) file
Jones Bill 235 S. Williams St. Denver CO 80221 (303) 244-7989
Smith Tom 404 Polk Ave. Los Angeles CA 90003 (213) 879-5612
不要使用shell循环,请参阅。不要使用shell循环,请参阅。