AWK命令将列显示为行

时间:2014-08-26 23:28:05

标签: unix awk foreach

./pkg_FC.mwlib

TILE_FC:1
TILE_FC:2
TILE_FC:3
TILE_FC:4

我可以使用awk命令引入此结果。但我需要输出

./pkg_FC.mwlib TILE_FC:1 TILE_FC:2 TILE_FC:3 TILE_FC:4

如何实现此输出。另外如何将此输出写入文件。我正在使用以下脚本使用foreach来获得上述输出。

foreach libname ( `find . -name "*mwlib"` )
echo $libname
ls -l $libname/FRAM | awk '{print $9}'
end

提前致谢

2 个答案:

答案 0 :(得分:1)

您使用了错误的工具并违反了shell编程的两个基本规则:

  1. 永远不要写for file in $(command)
  2. 从不解析ls
  3. 的输出

    查找文件的UNIX命令名为find。在其手册页中查找-printf-exec,并查找xargsstat的手册页。

    如果必须循环从某个命令输出的文件名,则语法是这样或类似的:

    command | while IFS= read -r file; do
        ...
    done
    

答案 1 :(得分:0)

对于换位,你可以这样做:

$ printf "TILE_FC:%d\n" {1..4} | awk 'ORS=(NR%4?" ":RS)'
TILE_FC:1 TILE_FC:2 TILE_FC:3 TILE_FC:4

$ printf "TILE_FC:%d\n" {1..6} | awk 'ORS=(NR%4?" ":RS)'
TILE_FC:1 TILE_FC:2 TILE_FC:3 TILE_FC:4
TILE_FC:5 TILE_FC:6

$ printf "TILE_FC:%d\n" {1..8} | awk 'ORS=(NR%4?" ":RS)'
TILE_FC:1 TILE_FC:2 TILE_FC:3 TILE_FC:4
TILE_FC:5 TILE_FC:6 TILE_FC:7 TILE_FC:8

如果您希望宽度不同,请更改4中的NR%4