【问题标题】:How to offset fields within a CSV file using awk, sed, cut, paste (Unix/Linux)?如何使用 awk、sed、cut、paste (Unix/Linux) 偏移 CSV 文件中的字段?
【发布时间】:2017-12-23 19:28:26
【问题描述】:

我在 CSV 文件中有一些工程数据,格式如下:

A1, B1
C2, D2, E2
F3, G3, H3

我需要将此文件转换为以下 CSV 格式:

B1
E2
H3

换句话说,只保留第 3 列的第 2 行及以上;但字段 B1 需要移动/对齐到第 3 列。

换言之,C2、D2、F3 和 G3 被丢弃。

有很多awksedcutpaste 解决方案用于移动、复制和粘贴整列或整行。但是我没有为这种自定义操作找到任何解决方案。

【问题讨论】:

  • 能否请您澄清“仅保留第 3 列的第 2 行及以上”。似乎您只想要每行的最后一个值,对吗?如果是这样,“awk '{print $NF}' 文件名”将执行此操作。这将是stackoverflow.com/questions/17921544/… 的重复
  • 小语法:在英语句子中,人称代词(几乎)一直存在。这是因为他们实际上在动词的末尾没有后缀,所以他们必须使用人称代词来完成相同的任务。如果你说“有一些工程数据”,并不是说“有一些……”,而是“你应该有一些……” .因为这句话看起来好像是祈使句。作为交换,如果你的所有句子中都有“我”,那就不是那么糟糕了。
  • field B1 needs to be shifted/aligned to column 3. In other words, C2, D2, F3 and G3 are discarded. print the last column of each line 的说法多么奇怪。如果这不是您的意思,请编辑您的问题以澄清。

标签: linux csv awk field paste


【解决方案1】:

假设你的输入文件是 jnk

awk -F"," '{print $NF}' jnk

【讨论】:

  • 去掉-F 设置(或改为-F', ')以避免在输出中出现前导空白字符。
【解决方案2】:

感谢所有有用的建议。我终于得到了以下工作方法,也许不是最有效的,但很有效。

\将第2列的前4行输出到appendme.csv

awk -F, 'NR>=1 && NR> appendme.csv

\抓取有用的列到data1.csv

awk -F, '{print $3}' input.csv >> data1.csv

\删除空行1-4输出data2.csv

sed -e '1,4d' data2.csv

\ 将 data2 内容输出到 appendme.csv(单列,因此隐含挂起附加到 $1)

awk -F, '{print $1}' data2.csv >> appendme.csv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 2020-06-19
    • 2014-07-25
    • 2014-12-10
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多