【问题标题】:Concatenate the output of multiple cuts in one line in shell script [closed]在shell脚本的一行中连接多个切割的输出[关闭]
【发布时间】:2020-10-18 07:05:19
【问题描述】:

我正在尝试将三个剪切函数的输出与 - 在 shell 脚本中的一行中连接起来。我尝试如下,但不会工作。我该怎么做?

echo "$(cut -d',' -f2 FILE.csv)-$(cut -d',' -f1 FILE.csv)-$(cut -d',' -f3 FILE.csv)"

【问题讨论】:

  • 请更好地描述问题而不是“无法解决”。给出准确的输入文件、预期结果和实际结果。
  • 如果FILE.csv 只包含一行,它应该可以工作。如果它包含多行并且您想逐行合并字段,请尝试使用paste -d'-' <(cut -d',' -f2 FILE.csv) <(cut -d',' -f1 FILE.csv) <(cut -d',' -f3 FILE.csv)awk 'BEGIN {FS=","; OFS="-"} {print $2,$1,$3}' FILE.csv
  • 每个剪切命令的输出将是文件每一行中的那个字段。所以你会得到所有字段 2,然后是所有字段 1,然后是所有字段 3。

标签: bash shell cut


【解决方案1】:

使用awk改变分隔符:

awk -F, '{ print $2, $1, $3 }' OFS='-' FILE.csv

或使用csvkit 命令(如果您的文件包含更复杂的 CSV,例如引号字段中的逗号或逗号分割无法正确处理的多行字段,则特别有用):

csvcut --columns 2,1,3 FILE.csv | csvformat -D'-'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多