簡體   English   中英

以相反的順序連接文件

[英]Concat files in reverse order

我需要以相反的順序將多個文件連接到一個文件。

不應更改文件中的行順序。

例如:

file 1.txt
1
2
file 2.txt
3
4

預期結果:

result.txt
3
4
1
2

這些命令不能按預期工作:

tac *.txt > result.txt只是顛倒文件中的行順序並按順序連接文件。 ( 2 1 4 3 )

cat $(ls -r) > result.txtls -r | xargs cat > result.txt 如果文件名包含空格字符, ls -r | xargs cat > result.txt將不起作用:

cat: file: No such file or directory
cat: 2.txt: No such file or directory
cat: file: No such file or directory
cat: 1.txt: No such file or directory

問題是,雖然ls -r返回'file 2.txt' 'file 1.txt' ,但echo $(ls -r)返回file 2.txt file 1.txt ,它看起來像cat的四個文件。


太好了 - 所以首先列出文件名,然后顛倒它們的順序,然后對它們進行分類。

find . -type f -name '*.txt' | sort -r | xargs -d'\n' cat

與文件名擴展類似,它自行排序:

printf "%s\n" *.txt | tac | xargs -d'\n' cat

要完全反對文件名中的換行符,請使用零分隔流 - printf "%s\0" find.. -print0 xargs -0 tac -s ''

記住不要解析 ls

試試這個(遞歸)function:

function revcat
{
    (( $# == 0 )) && return 0
    revcat "${@:2}"
    cat -- "$1"
}

示例用法:

revcat *.txt

由於沒有可以從 memory 輕松輸入的簡短的一行命令。 創建一個 function 並將其放入.bashrc文件是有意義的。

pjh 的遞歸 function工作緩慢。 所以我寫了這個:

function revcat {
  for item in "$@"; do
    echo "$item"; 
  done | tac | xargs -d"\n" cat;
}

它像cat一樣工作,但具有預期的、反向的文件連接順序。

例如: revcat *.txt > out.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM