C-shell:从行到列打印结果

Posted

技术标签:

【中文标题】C-shell:从行到列打印结果【英文标题】:C-shell: print result from row to column 【发布时间】:2021-07-12 22:21:20 【问题描述】:

我有输出:

1 rpt 4 qor 5 are 6 oip

我希望它变成:

1 rpt
4 qor
5 are
6 oip

这是我的代码:

set d = `sort "04.txt" | uniq -c`
echo $d

【问题讨论】:

请恢复您最近在问题中所做的更改。这与您的基本问题完全不同。您应该为新问题打开新帖子,请将其恢复为原始问题。那么这里给出的其他答案没有意义,谢谢。 我已经把你的问题改成了原来的问题,有新问题请开新帖,谢谢。 Again - 不要编写 csh 脚本。如果这是一个 bourne shell,那么您的问题就是您从 echo 参数中删除了标准引号(请参阅 mywiki.wooledge.org/Quotes)。用csh,idk,不值得探索。 @DongDao: GNU awk 可能是一个很好的工具。你需要花几个小时来阅读gawk的文档;另见sort(1) 和uniq(1) 以及GNU bash 的文档。另请阅读Advanced Linux Programming 请发布一个关于您正在尝试做的事情(而不是您尝试如何做)的新问题,从原始输入而不是您之前某个阶段的输出开始'已经实现并以您想要的最终输出结束,然后我们可以帮助您做任何正确的事情(绝对不会是 csh 脚本!)。 【参考方案1】:

使用您展示的示例,请尝试以下操作。

xargs -n 2 < Input_file

来自man xargs

-n max-args, --max-args=max-args 每个命令行最多使用 max-args 参数。如果大小,将使用少于 max-args 的参数 (请参阅 -s 选项)超出,除非给出 -x 选项,在 xargs 将退出哪种情况。

【讨论】:

请详细帮助我。我没有 Input_file @DONGDAO,我也从 xargs 的手册页中添加了详细信息。 OP 的输入几乎可以肯定已经在不同的行上,他们只是没有引用 arg 来回显,因此 shell 正在删除换行符,因此他们认为他们的输入都在 1 行。【参考方案2】:
akshay@sys:~$ cat file 
1 rpt 4 qor 5 are 6 oip

akshay@sys:~$ sed 's/ /\n/2; P; D'  file 
1 rpt
4 qor
5 are
6 oip

akshay@sys:~$ awk -v n=2 'for (i=n+1; i<=NF; i+=n) $i = "\n" $i1'  file
1 rpt 
4 qor 
5 are 
6 oip

akshay@sys:~$ awk -v RS=" " '$1=$1; ORS=NR%2?FS:"\n" 1'  file 
1 rpt
4 qor
5 are
6 oip

【讨论】:

请帮我一个新问题 @DONGDAO,请恢复您最近在问题中所做的更改。这与您的基本问题完全不同。您应该为新问题打开新帖子,请将其恢复为原始问题。那么这里给出的其他答案没有意义,谢谢。 OP 的输入几乎可以肯定已经在不同的行上,他们只是没有引用 arg 来回显,因此 shell 正在删除换行符,因此他们认为他们的输入都在 1 行。 @Ed Morton 你是对的,因为 OP 没有详细解释他的要求,我只是给出了给定输入的可能性。

以上是关于C-shell:从行到列打印结果的主要内容,如果未能解决你的问题,请参考以下文章

如何将mysql内部连接结果从行分组到列

PostgreSQL 交叉表转置行到列

具有两行到列的数据透视表

调整多级行到列查询

具有 LEAD/LAG 功能的行到列

将 QUERY 结果的 GROUPS 组转置为单列