Как заменить сложную строку столбцом в одном столбце файла?

Команда catможет принимать -в качестве маркера для stdin .(POSIX , " Если файл ' -', утилита cat должна прочитать стандартный ввод в этой точке последовательности. " )Это позволяет легко обрабатывать файл или стандартный ввод , где в противном случае это было бы запрещено.

Рассмотрим эти две тривиальные альтернативы, где аргумент оболочки $1равен-:

cat "$1" | nl    # Works completely transparently
nl < "$1"        # Fails with 'bash: -: No such file or directory'

Другой случай catполезен, когда он преднамеренно используется как операция no -просто для поддержания синтаксиса оболочки:

file="$1"
reader=cat
[[ $file =~ \.gz$ ]] && reader=zcat
[[ $file =~ \.bz2$ ]] && reader=bzcat
"$reader" "$file"

Наконец, я считаю, что единственный случай, когда UUOC действительно может быть правильно вызван, это когда catиспользуется с именем файла, которое, как известно, является обычным файлом (, то есть не устройством или именованным каналом ), и что команде не даются флаги:

cat file.txt

В любой другой ситуации могут потребоваться операции самого cat.

2
24.03.2020, 20:47
1 ответ

Вы можете попробовать это:

sed 's/\[b37\]\(.\),/:\1:/' 1kG_MDS5.bim

Выход:

1   rs58108140  0   10583   A   G
1   1:11508:A:G 0   11508   A   G
1   1:15820:G:T 0   15820   T   G
1   1:16257:C:G 0   16257   C   G
1   1:16378:C:T 0   16378   T   C

Проблема в вашем шаблоне заключается в том, что скобки не экранированы, поэтому sedпытается заменить вхождения b, 3 и 7, а не строку «[b37]».

1
28.04.2021, 23:19

Теги

Похожие вопросы