need to create lines from ones that begin with the field separator


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting need to create lines from ones that begin with the field separator
# 1  
Old 11-03-2010
need to create lines from ones that begin with the field separator

Hello,

I need to modify an awk script to recognize the last field $NF when the line is split over more than 1 line.

In my input file the field separator is the exclamation mark ! so FS="!"

So here is my input file infile.txt, it has 2 records, the field separator is in bold:

INPUT

Code:
4888689!?!Change of PROD
!TX!?!DETAILS
!US!?!?!file_937_20101024_065520.txt 

48887370!Change of PROD!?!?!cmt_det3_937_20101024_065520.txt

Before I do anything in the AWK script I need to be able recognize the last field for each line type.

For record type #1 the $NF (last field) is on a different line (I need to be able to get the last field for these) (AWK recognizes record one as being 3 different lines) ($NF would be file_937_20101024_065520.txt)

For record type #2 the $NF (last field) is on the same line (this is the way AWK would read most of them) ($NF would be cmt_det3_937_20101024_065520.txt)

So the rule would be:

If the field separator is the 1st character on the line then look at the previous line until the line does not start with the field separator and so then
$1 would be on the first line and the $NF will be at the end of the last line.

Then print the lines to an output file

OUTPUT

Code:
4888689!?!Change of PROD!TX!?!DETAILS!US!?!?!file_937_20101024_065520.txt 

48887370!Change of PROD!?!?!cmt_det3_937_20101024_065520.txt

Moderator's Comments:
Mod Comment Please use code tags

Last edited by vgersh99; 11-03-2010 at 04:34 PM.. Reason: Please use code tags!
# 2  
Old 11-03-2010
Code:
Input file :test has your text

bash-3.2$ cat test  | tr -d '\n'  |sed 's/txt/txt#/g' |tr '#' '\n'
4888689!?!Change of PROD!TX!?!DETAILS!US!?!?!file_937_20101024_065520.txt
 48887370!Change of PROD!?!?!cmt_det3_937_20101024_065520.txt

I gave a try but this is not a good way to do ..
hope some else helps you...
# 3  
Old 11-03-2010
Try this:
Code:
awk 'NR==1{s=$0; next}
/^!/{s=s $0;next}
{print s; s=$0}
END{if(s) print s}' file

# 4  
Old 11-03-2010
Thanks for the bash but I need to do it in AWK.

I put the code in a file called test.awk:
Code:
awk 'NR==1{s=$0; next}
/^/{s=s $0;next}
{print s; s=$0}
END{if(s) print s}' test_file.txt

On the UNIX Command Line I type:
Code:
./test.awk > new_file.txt

I get this error:
Code:
syntax error The source line is 1.
 The error context is
 <<<            NR==1{s=$0; >>>  next}
 awk: Quitting
 The source line is 1.

# 5  
Old 11-03-2010
Use nawk or /usr/xpg4/bin/awk on Solaris.
# 6  
Old 11-03-2010
Why does it work on those?

---------- Post updated at 04:51 PM ---------- Previous update was at 04:44 PM ----------

I think I need to use the sh environment..

From the UNIX Command Line I type:
Code:
./t.awk > 
new_file.txt

I get the error message:
Code:
interpreter "/usr/bin/sh" not found
ksh: ./t.awk:  not found

# 7  
Old 11-04-2010
Quote:
Originally Posted by script_op2a
Code:
./t.awk > 
new_file.txt

I get the error message:
Code:
interpreter "/usr/bin/sh" not found
ksh: ./t.awk:  not found

What kind of script is t.awk?

Can you post the entire script?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Inserting a field without disturbing field separator on other fields

Hi All, I have the input as below: cat input 032016002 2.891 97.109 16.605 27.172 24.017 32.207 0.233 0.021 39.810 0.077 0.026 19.644 13.882 0.131 11.646 0.102 11.449 76.265 23.735 16.991 83.009 8.840 91.160 0.020 99.980 52.102 47.898 44.004 55.996 39.963 18.625 0.121 1.126 40.189... (15 Replies)
Discussion started by: am24
15 Replies

2. Shell Programming and Scripting

Field separator

Hello All, I have a file, but I want to separate the file at a particular record with comma"," in the line Input file APPLE6SSAMSUNGS5PRICEPERPIECEDOLLAR600EACH010020340URX581949695US to Output file APPLE6S,SAMSUNGS5,PRICEPERPIECE,DOLLAR600EACH,010020340URX581949695,US This is for... (11 Replies)
Discussion started by: m6248m
11 Replies

3. Shell Programming and Scripting

awk field separator help -

Hi Experts , file : - How to construct the awk filed separator so that $1, $2 $3 , can be assigned to the each "" range. I am trying : awk -F"]" '{print $1}' but it is printing the entire file. Not first field. The desired output needed for first field... (9 Replies)
Discussion started by: rveri
9 Replies

4. Shell Programming and Scripting

awk field separator

I need to set awk field separator to ";", but I need to avoid ";EXT". so that echo a;b;c;EXTd;e;f | awk -F";" '{print $3}' would give "c;EXTd" (2 Replies)
Discussion started by: locoroco
2 Replies

5. UNIX for Dummies Questions & Answers

change field separator only from nth field until NF

Hi ! input: 111|222|333|aaa|bbb|ccc 999|888|777|nnn|kkk 444|666|555|eee|ttt|ooo|ppp With awk, I am trying to change the FS "|" to "; " only from the 4th field until the end (the number of fields vary between records). In order to get: 111|222|333|aaa; bbb; ccc 999|888|777|nnn; kkk... (1 Reply)
Discussion started by: beca123456
1 Replies

6. Shell Programming and Scripting

Array and field separator

Hi all, I have an array in BASH and I need to change the IFS in order to split up it correctly. Here an example: array_test=(hello world+sunny) for elem in ${array_test}; do echo $elem done echo -e "\n changed IFS \n" OLD_IFS=$IFS IFS=+ for elem in ${array_test}; do echo... (3 Replies)
Discussion started by: Dedalus
3 Replies

7. Shell Programming and Scripting

echo field separator

I am trying to echo all fields except for the last field. I want to include the field seperator, but it is removed. echo "a;s;v;g" | awk -F ";" '{$(NF--)=""; print}' a s v I want an output like this: a;s;v; (3 Replies)
Discussion started by: locoroco
3 Replies

8. Shell Programming and Scripting

Field separator X'1F'

Hi, I have a flat file with fields separated by a X'1F' i have to fetch 4th field from second line. please help me how to achieve it. I tried with below command and its not working. cut -f4 -d`echo -e '\x1f'` filename.txt I am using SunOS. Thanks in advance. (2 Replies)
Discussion started by: rohan10k
2 Replies

9. Shell Programming and Scripting

awk, comma as field separator and text inside double quotes as a field.

Hi, all I need to get fields in a line that are separated by commas, some of the fields are enclosed with double quotes, and they are supposed to be treated as a single field even if there are commas inside the quotes. sample input: for this line, 5 fields are supposed to be extracted, they... (8 Replies)
Discussion started by: kevintse
8 Replies

10. Shell Programming and Scripting

Field separator in awk

Hi I need to check if field separator I am using in awk statement is " : ", for example: TIME=12:59 HOUR=`echo "$TIME" | awk '{FS=":"; print $1}'` MINUTES=`echo "$TIME" | awk '{FS=":"; print $2}'` Is there a way to check within the above awk statement ? Thanks for help -A (2 Replies)
Discussion started by: aoussenko
2 Replies
Login or Register to Ask a Question