使用awk将一列数据转换为一行

问题描述 投票:0回答:3

我正在尝试使用 nawk 将数据列转换为行

input=
1775
1800
1825
200
2850
3050
3075
3175

我的代码是:

nawk 'BEGIN{ORS=","}{print $0}'

但输出不包括我的输入文件中的所有数据集。 谁能帮我解决这个问题...?

输出:

,2850,3050,3075,3175,
awk
3个回答
2
投票

你可以这样做

nawk '{$1=$1}1' RS= OFS=, file > newfile

这将修剪字符串并用逗号替换所有换行符。

查看在线演示

input="
1775
1800
1825
200
2850
3050
3075
3175"

nawk '{$1=$1}1' RS= OFS=, <<< "$input"

输出:

1775,1800,1825,200,2850,3050,3075,3175

0
投票

您可以尝试以下吗?

awk -v OFS="," '
{ 
  gsub(/\r/,"")
  val=(val?val OFS:"")$0
}
END{
  print val
}
'  Input_file

通过查看 OP 的尝试,看起来 OP 可能在 Sun o.s Solaris 系统上,如果是这种情况,请将

awk
更改为
nawk

说明:

OFS
设置为 ,以获取逗号分隔值的输出。创建名为 val 的变量,其值每次都用逗号连接起来。在此代码的 END 部分打印变量 val 以根据 OP 要求将所有行以逗号分隔。



未在 Sun 操作系统上进行测试,如果您在那里有粘贴命令,请尝试

tr -d '\r' < Input_file > temp && mv temp Input_file;paste -sd',' Input_file

0
投票
input="
1775
1800
1825
200
2850
3050
3075
3175"
echo "$input" | paste -sd, -

输出:

,1775,1800,1825,200,2850,3050,3075,3175

编辑: 要摆脱领先的昏迷,您可以使用 sed

echo "$input" | paste -sd, - | sed 's/^,//'
© www.soinside.com 2019 - 2024. All rights reserved.