Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Shell:如何右对齐我的文件的列_Bash_Shell_Awk_Printf - Fatal编程技术网

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
循环。使用shell
for
循环也可以工作

$ 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
循环。使用shell
for
循环也可以工作

$ 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循环,请参阅。