Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
使用unix空间设置文件输出格式_Unix_Awk_Formatting_Text Processing - Fatal编程技术网

使用unix空间设置文件输出格式

使用unix空间设置文件输出格式,unix,awk,formatting,text-processing,Unix,Awk,Formatting,Text Processing,这是原始文件的外观 cat new Jackson, Bob D. C0001 book pizza apple 4.00 123as Filer, Jack C0002 happy apple hat 4.00 124ab Metro, Jim K. C0003 kindle pizza grape 4.00 125ac 对于没有中间名的名称,我在格式化此文件时遇到问题 $ cat new | awk '{printf "%10s %7s %3s %6s %7s %6s %6s %4s %

这是原始文件的外观

cat new

Jackson, Bob D. C0001 book pizza apple 4.00 123as
Filer, Jack C0002 happy apple hat 4.00 124ab
Metro, Jim K. C0003 kindle pizza grape 4.00 125ac
对于没有中间名的名称,我在格式化此文件时遇到问题

$ cat new | awk '{printf "%10s %7s %3s %6s %7s %6s %6s %4s %6s\n" $1, $2, $3, $4, $5, $6, $7, $8, $9}'

Jackson, Bob D. C0001 book   pizza apple 4.00 123as
Filer, Jack C0002 happy  apple hat   4.00 124ab
Metro, Jim K.   C0003 kindle pizza grape 4.00 125ac
这就是我想要的格式,每列间隔1个空格,一部分,就像名字是Jackson,Bob D。是一列c0001,是一列,现在名字在每个字母之间有空格。问题是没有中间名的人把一切都搞砸了我怎么能把这个文件格式化成这样

Jackson, Bob D. C0001 book   pizza apple 4.00 123as
Filer, Jack     C0002 happy  apple hat   4.00 124ab
Metro, Jim K.   C0003 kindle pizza grape 4.00 125ac

所以所有的东西都排好了,看起来很干净。任何问题都让我知道。提前谢谢你的帮助

awk
救援

$ awk -v OFS='~' '{$2=$2" "$3;$3=""} 
            NF==10{$2=$2" "$4;$4=""} 
             NF==9{$3=$3 OFS ""}1' file | column -ts~

1  Jackson, Bob D.  C0001  book    pizza  apple  4.00  123as
2  Filer, Jack      C0002  happy   apple  hat    4.00  124ab
3  Metro, Jim K.    C0003  kindle  pizza  grape  4.00  125ac
作为替代解决方案,您可以在
awk
中移动字段,但也可以这样做


将输出字段分隔符(OFS)设置为一些未使用的字符(此处为波浪形),并让
通过该分隔符处理格式设置。

请显示用于生成此分隔符的示例输入文件。您只为名称指定了三个字符,为什么希望其宽度大于此值?否,他为名称@pfnuesel指定了10个字符;3是数字。不,问题不在于我缺少字符。它所做的是当人们没有中间字母时,它会拉到下一列,所以C0002试图打印中间名的位置,如果这有意义的话。我试图做的是将每一列清楚地分开,这样没有中间名的想法就不会弄乱它。好吧,我在我正在查看的原始文件内容,我正在尝试格式化,我现在设置的方式是否会影响这一点?因为它仍在尝试将c0002作为中间名,并且不确定为什么将所有字段移位一$2->$1等。条件也需要减少1。很抱歉,不适合使用此命令。我们减少了什么?awk的新功能仍然很抱歉出现混淆。有没有办法将新输出保存到文件中?或者是一个变量而不丢失我们刚刚做的事情?只需在末尾添加
>outputfilename