shell 在一个给定的文件中,使用长度短的行作为键,长度长的行作为值,并在另一个文件中获得输出[关闭]

ki0zmccv  于 2023-10-23  发布在  Shell
关注(0)|答案(1)|浏览(100)

已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。

上个月关门了。
社区上个月审查了是否重新打开这个问题,并将其关闭:
原始关闭原因未解决
Improve this question
我有一个文本文件,看起来像这样

729590
fbe2d8c9-5b33-4758-8668-7e9f9f70085b
326e9ee4-da56-44de-ad40-e42f14dbf6c4
459590
d43bcb29-7c91-411c-ad5a-7450a927d2df
865431
f719b802-a7bd-4b83-aa02-08e3d3f351ff
8fcb6aed-9c87-4c0d-af94-9200830c4e27
c56378e8-fb14-4cd4-b816-020b328fb50a
345621
9fd92086-e681-4458-9631-cfa02d349fee
16cf1a8d-3fd8-49a3-b9fd-445a1413d280
07f31e67-07a4-4088-8cdd-9354d26cbd70
d6af1a35-563e-4e51-8533-0ec0a39d26fa
e7ae32e8-3658-400b-ab95-5107bedb6f34

使用这个文件,我想得到一个输出在另一个csv文件的格式如下所示

729590,fbe2d8c9-5b33-4758-8668-7e9f9f70085b,some_text
729590,326e9ee4-da56-44de-ad40-e42f14dbf6c4,some_text
459590,d43bcb29-7c91-411c-ad5a-7450a927d2df,some_text
865431,f719b802-a7bd-4b83-aa02-08e3d3f351ff,some_text
865431,8fcb6aed-9c87-4c0d-af94-9200830c4e27,some_text
865431,c56378e8-fb14-4cd4-b816-020b328fb50a,some_text
345621,9fd92086-e681-4458-9631-cfa02d349fee,some_text
345621,16cf1a8d-3fd8-49a3-b9fd-445a1413d280,some_text
345621,07f31e67-07a4-4088-8cdd-9354d26cbd70,some_text
345621,d6af1a35-563e-4e51-8533-0ec0a39d26fa,some_text
345621,e7ae32e8-3658-400b-ab95-5107bedb6f34,some_text

我已经写了代码,在while循环的帮助下完成它,但想知道这是他们的任何其他简单的方法,可能是使用awk命令。

wwtsj6pe

wwtsj6pe1#

假设您的“分组密钥”是一个6位数(729590459590865431345621),以下应该可以工作:

awk 'BEGIN{OFS=","} /^[0-9]{6}$/ {i=$0; next} {print i, $0, "some_text"}' input.txt

说明

  • 当我们调用print函数时,BEGIN{OFS=","}将把,定义为分隔符(例如,print "a", "b"将显示a,b
  • /^[0-9]{6}/ {i=$0; next}匹配6位数,并将其存储在变量i中。然后它转到下一行(next
  • {print i, $0, "some_text"}:对于每隔一行,它打印变量i,当前行($0,在您的情况下是uuid)和some_text。每个字段将由,分隔(由OFS定义)

感谢@艾德莫顿在评论部分的建议:)

相关问题