使用 AWK 和 SED 模式,我最终得到了一个类似于
| 9000 3000 1000 0000 0000 2000 1000 2000 | 5669000 518000 3000 16000 0000 28000 2241000 2841000 | 9020000 453000 520000 4000 2852000 5191000 75000 |
是否可以连接“|”之间分隔的行 用逗号分隔成一行?
9000,3000,1000,0000,0000,2000,1000,2000 5669000,518000,3000,16000,0000,28000,2241000,2841000 9020000,453000,520000,4000,2852000,5191000,75000
我使用粘贴来执行此操作,但它会产生不希望的结果,因为“|”之间的行数 不相等。
awk
解决方案。怀疑是有点啰嗦。在线尝试!
这似乎工作得很好:
我们使用
tr
将|
s 翻译成新行,并将换行符翻译成,
s。然后,我们将得到的输出和剥离和前导或尾随,
s 与sed
.一种方法可能是:
解释:
-0777
,然后将其拆分-F\|\n
,即,无论我们在哪里看到管道字符后跟换行符。-a
选项会将拆分字段存储到数组@F
中,该数组是零索引的。@F
,即,$F[0]
将为空,因此在打印时不会显示。for
循环循环遍历数组的所有元素,@F
并且对于每个元素,它将所有那些看不到字符串结尾的换行符更改为紧邻的右侧,(?!\z)
用逗号替换。输出:
另一种使用
POSIX
lysed
编辑器的方法。在这里,我们尽可能多地加载模式空间,以做出打印它的决定:在这种方法中,我们 slurp 文件:
GNU sed
可以通过设置一个 do-until 循环来加载模式空间,而我们还没有看到 | 。注意:我们假设输入的最后一行和第一行必须是 |。RS='|'
awk 的默认记录分隔符\n
更改为管道|
。,
OFS=,
将 awk 的默认输出字段分隔符更改为逗号,该分隔符是空格,
。(
$1==$1
您可以使用任何字段)会导致重新评估$0
(awk 中的已知整行),并将加入基于 RS as|
和 OFS as的字段,
。双引号 in
'$1=$1""'
用于强制 awk 进行字符串赋值,因此不会删除只有零的行。输出是: