使用paste -d或tr将垂直文本转换为水平文本

使用paste -d或tr将垂直文本转换为水平文本

我有垂直格式的数据列表,我想要水平格式的数据列表

fl.txt:

data
1
2
3
4
5

所需的输出是:

1 2 3 4 5

我的代码:当我使用此命令时,它仅打印最后一个值:5

 paste -s -d "" fl.txt

答案1

从注释中可以清楚地看出您正在使用包含 Windows 文本数据的文件。使用以下命令将其转换为 Unix 文本文件dos2unix

dos2unix fl.txt

Data一旦它是 Unix 文本文件,您可以使用sed 1d fl.txt或删除文件的第一行,其中包含标题tail -n +2 fl.txt

通过用空格替换所有换行符,可以将结果行转换为单行上以空格分隔的列:

sed 1d fl.txt | tr '\n' ' '

然而,这将生成不以换行符终止的输出。

您还可以paste按照与您建议的方式类似的方式使用:

sed 1d fl.txt | paste -s -d ' ' -

paste命令将生成以换行符结尾的单行。

答案2

使用 GNU sed

sed '1d; s/\r$//' f1.txt | paste -sd " "

或者,在 sed 中实现粘贴部分

sed -n '1d; s/\r$//; H; ${ x; s/^\n//; s/\n/ /g; p }' f1.txt

答案3

bash 或 ksh93 中的简单选项:

echo $(<fl.txt)

或者:

xargs -a fl.txt

第一行可以这样删除:

{ head -1 >/dev/null; paste -sd' '; } <fl.txt

或者:

{ head -1 >/dev/null; fmt -100; } <fl.txt

在子外壳中:

(>/dev/null head -1; xargs) <fl.txt

相关内容