我有垂直格式的数据列表,我想要水平格式的数据列表
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