Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在文本文件的第一行之前插入文件名-文件扩展名_Bash_Awk - Fatal编程技术网

Bash 在文本文件的第一行之前插入文件名-文件扩展名

Bash 在文本文件的第一行之前插入文件名-文件扩展名,bash,awk,Bash,Awk,这很有效 但是我想排除文件扩展名 ~$ awk -i inplace -v ORS='\r\n' 'FNR==1{print FILENAME}1' * 我不知道怎么混合。还是有别的办法 如何修复它?第一种解决方案,无需使用新变量并编辑文件名变量本身:请根据显示的示例尝试以下操作。我建议在单个文件上运行此程序一次,然后在所有文件上运行,因为您正在执行就地更新,一旦您对该文件的更新感到满意,然后在所有文件上运行您的命令 .... sub(/\.[^.]+$/, "", FIL

这很有效

但是我想排除文件扩展名

~$ awk -i inplace -v ORS='\r\n' 'FNR==1{print FILENAME}1' *
我不知道怎么混合。还是有别的办法

如何修复它?

第一种解决方案,无需使用新变量并编辑文件名变量本身:请根据显示的示例尝试以下操作。我建议在单个文件上运行此程序一次,然后在所有文件上运行,因为您正在执行就地更新,一旦您对该文件的更新感到满意,然后在所有文件上运行您的命令

.... sub(/\.[^.]+$/, "", FILENAME) ...

第二种解决方案使用变量作为文件名,如果需要,我们可以稍后使用文件名:或者不更改文件名默认变量,而是创建一个临时变量,其中包含文件名,以便在以后的程序中需要使用文件名的情况下,我们可以使用它,尝试如下操作:

awk -i inplace -v ORS='\r\n' '
FNR==1{
match(FILENAME,/.*\./)
print substr(FILENAME,RSTART,RLENGTH-1)
}
1' Input_file
或者我们也可以使用匹配函数,如下所示:

awk -i inplace -v ORS='\r\n' '
FNR==1{
file=FILENAME
sub(/\.[^.]+$/,"",file)
print file
}
1' Input_file
注意:将输入文件更改为*或文件扩展名以将其传递给awk程序。

1st解决方案不使用新变量并编辑文件名变量本身:请根据显示的示例尝试以下操作。我建议在单个文件上运行此程序一次,然后在所有文件上运行,因为您正在执行就地更新,一旦您对该文件的更新感到满意,然后在所有文件上运行您的命令

.... sub(/\.[^.]+$/, "", FILENAME) ...

第二种解决方案使用变量作为文件名,如果需要,我们可以稍后使用文件名:或者不更改文件名默认变量,而是创建一个临时变量,其中包含文件名,以便在以后的程序中需要使用文件名的情况下,我们可以使用它,尝试如下操作:

awk -i inplace -v ORS='\r\n' '
FNR==1{
match(FILENAME,/.*\./)
print substr(FILENAME,RSTART,RLENGTH-1)
}
1' Input_file
或者我们也可以使用匹配函数,如下所示:

awk -i inplace -v ORS='\r\n' '
FNR==1{
file=FILENAME
sub(/\.[^.]+$/,"",file)
print file
}
1' Input_file
注意:将输入文件更改为*或文件扩展名以将其传递给awk程序。

使用GNU awk,您可以使用gensub:

awk-i inplace-v ORS='\r\n''FNR==1{print gensub/\..[^.]+$/,1,FILENAME}1'* gensub/\.[^.]+$/,1,文件名表示:

/\.[^.]+$/-查找。后跟一个或多个非点字符,直到字符串结束 -替换为空字符串 1-仅搜索一次 文件名-这是输入文本。 请参阅。

使用GNU awk,您可以使用gensub:

awk-i inplace-v ORS='\r\n''FNR==1{print gensub/\..[^.]+$/,1,FILENAME}1'* gensub/\.[^.]+$/,1,文件名表示:

/\.[^.]+$/-查找。后跟一个或多个非点字符,直到字符串结束 -替换为空字符串 1-仅搜索一次 文件名-这是输入文本。
请参阅。

通常只读取以\n结尾的输入,但生成以\r\n结尾的输出-确实要这样做吗?如所写,如果输入文件以\r\n结尾,则输出将以\r\r\n结尾。通常希望读取以\r\n结尾的输入,但生成以\r\n结尾的输出-确实要这样做吗?如所写,如果输入文件以\r\n结尾,则输出将以\r\r\n结尾。