Bash 在shell中的两个可变子字符串之间剪切字符串
我的文件名如下(省略实际名称) 我需要在filename_前缀和runid之间提取文件名 这里的问题是文件名更改,并且有2-5个字段长。 我一直在用这个Bash 在shell中的两个可变子字符串之间剪切字符串,bash,shell,awk,Bash,Shell,Awk,我的文件名如下(省略实际名称) 我需要在filename_前缀和runid之间提取文件名 这里的问题是文件名更改,并且有2-5个字段长。 我一直在用这个 echo "filename_prefix_filename_filename_filename_runid_date_part-r-00020-c68fdc43-53bc-4aa9-a96b-2692ae2aa508.orc " | awk 'NR > 1 {print $1}' RS='filename_prefix' FS='run
echo "filename_prefix_filename_filename_filename_runid_date_part-r-00020-c68fdc43-53bc-4aa9-a96b-2692ae2aa508.orc " | awk 'NR > 1 {print $1}' RS='filename_prefix' FS='runid'
这在命令行上运行良好,但我需要将RS和FS作为变量传递,因为
echo of file name |awk -v file_p=$file_prefix -v r_id=_$RUN_ID 'NF > 1 {print $1}' RS=file_p FS=r_id
上面的命令不起作用
文件名:
filename_prefix_filename_filename_filename_runid_date_part-r-00020-c68fdc43-53bc-4aa9-a96b-2692ae2aa508.orc
filename_prefix_filename_filename_runid_date_part-r-00020-c68fdc43-53bc-4aa9-a96b-2692ae2aa508.orc
因为您仍然在
awk
脚本本身之外设置RS
和FS
,所以使用shell变量,而不是awk
变量
... | awk 'NF > 1 {print $1}' RS="$file_prefix" FS="$RUN_ID"
或者,您可以使用
... | awk -v RS="$file_prefix" -v FS="$RUN_ID" 'NF > 1 {print $1}'
或
但是,最后一个是不必要的间接。因为您仍然在
awk
脚本本身之外设置RS
和FS
,所以使用shell变量,而不是awk
变量
... | awk 'NF > 1 {print $1}' RS="$file_prefix" FS="$RUN_ID"
或者,您可以使用
... | awk -v RS="$file_prefix" -v FS="$RUN_ID" 'NF > 1 {print $1}'
或
然而,最后一个是不必要的间接。对
RS
和FS
的赋值是错误的。这里不能使用Awk变量;它们被简单地解释为静态字符串(这是唯一有意义的安排)
对
RS
和FS
的赋值错误。这里不能使用Awk变量;它们被简单地解释为静态字符串(这是唯一有意义的安排)
您可以在
bash
中执行相同的操作,尽管这是一个两步过程
$ f="filename_prefix_filename_filename_filename_runid_date_part-r-00020-c68fdc43-53bc-4aa9-a96b-2692ae2aa508.orc";
pre="filename_prefix_";
run="_runid*";
$ ff=${f%$run}; echo ${ff#$pre}
filename_filename_filename
您可以在
bash
中执行相同的操作,尽管这是一个两步过程
$ f="filename_prefix_filename_filename_filename_runid_date_part-r-00020-c68fdc43-53bc-4aa9-a96b-2692ae2aa508.orc";
pre="filename_prefix_";
run="_runid*";
$ ff=${f%$run}; echo ${ff#$pre}
filename_filename_filename
非常感谢。工作得很有魅力。了解awk的工作,感谢您的帮助谢谢。工作得很有魅力。了解awk的工作,谢谢您的帮助