Вы просто пытаетесь отсортировать файл по длине каждой строки?Со стандартными инструментами в любой оболочке на любой машине UNIX, которые будут:
awk -v OFS='\t' '{print length(), NR, $0}' file | sort -k1,2n | cut -f3-
Например:
$ cat file
other stuff
text
foo
stuff
bar
$ awk -v OFS='\t' '{print length(), NR, $0}' file | sort -k1,2n | cut -f3-
foo
bar
text
stuff
other stuff
Если это не так, пожалуйста, отредактируйте свой вопрос, чтобы уточнить, что этовы пытаетесь сделать, и каков ваш фактический вопрос.
Обновление - учитывая данные, которые вы добавили в свой вопрос:
$ paste file2.txt file1.txt | sort -k1,2n | cut -f2-
one
five
three
eleven
sixteen
thirteen
Обратите внимание, что это не обязательно сохранитпорядок строк одинаковой длины - вам нужно добавить опцию GNU -s
("stable") к sort
, чтобы сделать это:
paste file2.txt file1.txt | sort -s -k1,2n | cut -f2-
или сделать это только для bash:
paste file2.txt <(cat -n file1.txt) | sort -k1,2n | cut -f3-
или то, что переносимо на все оболочки / Unixes:
awk -v OFS='\t' 'NR==FNR{a[NR]=$0;next} {print a[FNR], FNR, $0}' file2.txt file1.txt | sort -k1,2n | cut -f3-
или что-то сделать с явным временным файлом или документом here.