Как скопировать первый столбец из файла A в файл b?

#perl #copy

#perl #Копировать

Вопрос:

Я только что изучил программирование на Perl, и мне нужна помощь. Я хочу скопировать 1 столбец из файла A в новый файл. В файле A есть 3 столбца, и я хочу скопировать только файл первого столбца в новый файл, кто-нибудь может мне помочь?

file_a.txt

 JJ | John Junior    | 300-400
SJ | Samuel Jackson | 500-600
CJ | Chris John     | 789-899
BB | Bernard Blaze  | 789-899
LV | Luis Villa     | 789-899
  

Я хочу скопировать раздел первого столбца в новый файл:

newfile.txt

 JJ
SJ
CJ
BB
LV
  

Я нашел в Интернете, что мне нужно использовать разделитель tab (t) для разделения столбцов и использовать разделитель новой строки (n) для разделения строк.(но я не понимаю)

Извините, я новичок, может быть, кто-то хочет мне помочь. Спасибо

Комментарии:

1. Perl даже не нужен. cut -d '|' -f1 file_a.txt > newfile.txt из оболочки.

2. … или cut -d' ' -f1 не включать пробел.

3. Хорошо, я в замешательстве. Кажется, что включенный вами пример файла использует | (отсюда и мой первый комментарий) или, может <space>|<space> быть, в качестве разделителя столбцов, но затем вы упоминаете вкладки? Что вы используете?

4. Я научился создавать программу, спасибо, что помогли мне

Ответ №1:

Существует много способов отфильтровать первый столбец:

  • cut -d ' ' -f1 in_file > out_file (UNIX / Linux / Mac OSX)
  • nawk '{ print $1 }' in_file > out_file (UNIX / Linux / Mac OSX)

Если вас интересует сценарий perl

 use strict;
use warnings;
use feature 'say';

my $in  = shift;
my $out = shift;

open my $fh_in, '<', $in
    or die "Couldn't open $in";
    
open my $fh_out, '>', $out
    or die "Couldn't open $out";

while( <$fh_in> ) {
    chomp;
    say $fh_out (split)[0];
}

close $fh_in;
close $fh_out;
  

Короткая версия выполняется как script.pl in_file > out_file

 use strict;
use warnings;
use feature 'say';

say ((split)[0]) while <>;
  

Или даже короче с помощью perl one liner

perl -ane "print qq($F[0]n)" in_file > out_file

Комментарии:

1. perl -anE 'say $F[0]' in_file > out_file если мы играем в гольф.

2. Большое вам спасибо, это действительно помогло мне!

3. @Shawn или perl -pe 's/ .*//' in_file > out_file если мы действительно играем в гольф 😉