【发布时间】:2013-08-29 08:14:34
【问题描述】:
我正在使用以下awk 命令:
my_command | awk -F "[[:space:]]{2,}+" 'NR>1 {print $2}' | egrep "^[[:alnum:]]"
像这样成功返回我的数据:
fileName1
file Name 1
file Nameone
f i l e Name 1
所以你可以看到一些文件名有空格。这很好,因为我只是想回显文件名(没什么特别的)。问题是在循环中调用该特定行。我正在尝试这样做:
i=1
for num in $rows
do
fileName=$(my_command | awk -F "[[:space:]]{2,}+" 'NR==$i {print $2}' | egrep "^[[:alnum:]])"
echo "$num $fileName"
$((i++))
done
但我的输出总是null
我也尝试过使用awk -v record=$i,然后打印$record,但得到以下结果。
f i l e Name 1
编辑
很抱歉造成混淆:rows 是一个变量,它列出了像这样的 ID 11 12 13
并且这些 id 中的每一个都与一个文件名相关联。我没有做任何解析的命令如下所示:
id File Info OS
11 File Name1 OS1
12 Fi leNa me2 OS2
13 FileName 3 OS3
我只能使用id 字段来运行我需要的命令,但我想使用File Info 字段来通知用户实际的File 正在执行该命令。
【问题讨论】:
-
为什么将输出 my_command 传递回它的输入 - 或者这是一个发布错字?
-
这是一个错字!谢谢..
-
每次循环运行 awk 以提取一行是非常低效的。你到底想做什么?
-
@MarkReed 我需要使用
my_command检索文件名列表,然后将文件名绑定到来自不同命令的数字。 -
@MarkReed 我明白你的意思。谢谢你的建议!