shell 使用column命令时出现Bash错误:'column:行太长'

zzlelutf  于 2023-01-31  发布在  Shell
关注(0)|答案(3)|浏览(244)

在输入文件中键入此列命令时,出现以下错误

column -t text.txt > output
column: line too long
column: line too long
column: line too long
column: line too long
column: line too long
column: line too long

当我查看文件输出时,似乎文件的前半部分(从左到右)没有打印。
有没有办法绕过这个错误?有没有办法在没有这个错误的情况下准确地做命令本来会做的事情?
样本输入(真实的输入~640列)

column1 column2 column3 column4
03  2   45  3
5   6   7   8

示例输出(真实的输出~640列)

column1    column2  column3  column4
03         2        45       3
5          6        7        8
wljmcqd8

wljmcqd81#

您可以尝试一个简单的awk实现:

awk 'NR==FNR{for(i=1;i<=NF;i++) 
        max[i] = length($i) > max[i] ? length($i) : max[i]; next} 
{ for(i=1;i<=NF;i++) printf "%-"max[i]"s  ", $i; printf "\n"}' text.txt text.txt
ef1yzkbh

ef1yzkbh2#

另一种方法是将该行拆分为数组。该行太长,column不会完整打印该行:

FULLTEXT=$(cat /Users/burroughclarke/Desktop/commaseperatedvalues.csv)
printf "$FULLTEXT" | column  -t -s ','

这将正确打印它:

readarray -t ARR < <(cat /Users/burroughclarke/Desktop/commaseperatedvalues.csv | tr "\n" "\n") 
printf '%s\n' "${ARR[@]}" | column  -t -s ','
aamkag61

aamkag613#

从@pestophagous发布这条评论,因为它是一个合法的答案,它回答了问题 * 为我 *:
对于像我这样的人谁看到“线太长”,即使是在非常短的线:如果一个文件的最后一行没有以任何换行符结束,你也会看到这个错误。2(或者,更普遍地说,如果你通过管道传送到列的STDIN的最后一个字节没有以换行符结束)
在我自己的案例中,我通过在前面添加一个小的sed命令解决了这个问题:

< input.txt sed 's/$/\n/' | column ...

相关问题