【问题标题】:Transpose one line/lines from column to row using shell使用 shell 将一行/行从列转置到行
【发布时间】:2012-12-27 08:02:58
【问题描述】:

我想使用 unix 命令将 txt 文件中的一列数据转换为 csv 文件中的一行。

示例:

ApplChk1,
ApplChk2,
v_baseLoanAmountTI,
v_plannedClosingDateField,
downPaymentTI,

这是一个存在于 txt 文件中的列

我想在 csv 文件中输出如下

ApplChk1,ApplChk2,v_baseLoanAmountTI,v_plannedClosingDateField,downPaymentTI,

请告诉我怎么做。

提前致谢

【问题讨论】:

    标签: shell unix


    【解决方案1】:

    如果这是一个单列,你想将其转换为行,那么有很多可能性:

    tr -d '\n' < filename ; echo # option 1 OR
    xargs echo -n < filename ; echo # option 2 (This option however, will shrink spaces & eat  quotes) OR
    while read x; do echo -n "$x" ; done < filename; echo # option 3
    

    请告诉我们,多行情况下输入的样子。

    【讨论】:

    • 怎么不工作了?你得到什么输出而不是预期的输出?
    • 我得到了一个类似 -bash: syntax error near unexpected token `do'的错误
    • 你的 bash 版本是什么?这是while loop 的标准语法之一。
    • 这是UUOC。请改用tr -d '\n' &lt; filename
    • bash 版本为 3.00.15(1)
    【解决方案2】:

    一个有趣的 bash 解决方案(bash ≥ 4.1):

    mapfile -t < file.txt; printf '%s' "${MAPFILE[@]}" $'\n'
    

    完成!

    【讨论】:

      【解决方案3】:
      for i in `< file.txt` ; do echo -n $i; done; echo ""
      

      给出输出

      ApplChk1,ApplChk2,v_baseLoanAmountTI,v_plannedClosingDateField,downPaymentTI,
      

      将输出发送到文件:

      { for i in `< file.txt` ; do echo -n $i ; done; echo; } > out.csv
      

      当我运行它时,会发生这种情况:

      [jenny@jennys:tmp]$ more file.txt 
      ApplChk1,
      ApplChk2,
      v_baseLoanAmountTI,
      v_plannedClosingDateField,
      downPaymentTI,
      [jenny@jenny:tmp]$ { for i in `< file.txt` ; do echo -n $i ; done; echo; } > out.csv
      [jenny@jenny:tmp]$ more out.csv 
      ApplChk1,ApplChk2,v_baseLoanAmountTI,v_plannedClosingDateField,downPaymentTI,
      

      【讨论】:

      • 如何将输出发送到您使用的命令的 csv 文件
      • 它不起作用,代码给出的输出与 txt 文件中的文本相同
      • 只是在这里确定一下 - 您正在查看文件 out.csv 中的输出,而不是文件 file.txt 中的输出,对吗? (感谢 Anishsane 的编辑!)
      • 是的,我正在查看 out.csv,您希望我看到 file.txt 中的输出
      • 我想在 CSV 文件中输出单行
      【解决方案4】:
      perl -pe 's/\n//g' your_file
      

      以上将输出到标准输出。 如果你想就地做:

      perl -pi -e 's/\n//g' your_file
      

      【讨论】:

        【解决方案5】:

        您可以使用 Linux 命令 sed 将行 \n 替换为逗号 , 或空格

        sed -z 's/\n/,/g' test.txt > test.csv
        

        如果您想就地更改文件,还可以添加-i 选项:

        sed -i -z 's/\n/,/g' test.txt
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-27
          • 1970-01-01
          • 2014-11-15
          • 2013-07-29
          • 2016-10-18
          相关资源
          最近更新 更多