gpt4 book ai didi

linux - 连接 echo 的结果和命令输出

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:53 24 4
gpt4 key购买 nike

我有以下代码:

names=$(ls *$1*.txt) 
head -q -n 1 $names | cut -d "_" -f 2

其中第一行查找所有与命令行输入匹配的名称并将其存储到名为 names 的变量中,第二行获取每个文件中的第一行(变量名称的元素)并输出该行的第二部分基于“_”delim。

一切都很好,但是我想将文件名(存储为变量名中的行)添加到 cut 的输出中。我试过:

names=$(ls *$1*.txt) 
head -q -n 1 $names | echo -n "$names" cut -d "_" -f 2

但是这只会打印出文件名

我试过了

names=$(ls *$1*.txt 
head -q -n 1 $names | echo -n "$names"; cut -d "_" -f 2

我再次只打印出文件名。

期望的输出是:

$
filename1.txt <second character>

文件名和剪切结果之间有一个空格。

谢谢。

最佳答案

最佳方法,使用 awk

您可以一次调用 awk 来完成所有这些:

awk -F_ 'NR==1{print FILENAME, $2; exit}' *"$1"*.txt

在第一个文件的第一行,打印文件名和第二列的值,然后退出。


纯 bash 解决方案

我总是建议不要解析 ls - 相反我会使用循环:

您可以通过使用 bash 内置功能避免使用 awk 读取文件的第一行:

for i in *"$1"*.txt; do
IFS=_ read -ra arr <"$i"
echo "$i ${arr[1]}"
break
done

这里我们将文件的第一行读取到一个数组中,在 _ 上将其拆分成多个部分。

关于linux - 连接 echo 的结果和命令输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29299046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com