Sponsored Content
Top Forums UNIX for Advanced & Expert Users Command to display nth line before the string is matched. Post 302254820 by bakunin on Wednesday 5th of November 2008 08:49:24 AM
Old 11-05-2008
Use sed and read in (up to) three lines with the "N" subcommand. Use the "D" and "N" subcommands to set up a loop where the next one line is added to the pattern space and the first line of the pattern space is deleted. Once you have encountered your line the first line in the pattern space is the line you searched for.

(You could also use your pattern space solely for the searching and use the hold space as your buffer. In this case use the respective hold-space-manipulation commands instead of setting up the ring buffer with a D-N-loop.

Similar concepts using a buffer of three lines where one line is added "at the bottom" and the first line deleted surrepetitously can be implemented in awk or even shell too. The following implemetation is probably the slowest and least efficient one but the most readable, so it is showing the mechanism best. Note that the "next element" is - because of the ring structure of the buffer - also the third-to-last one:

Code:
function pNextElement
{
     (( iCnt=(iCnt+1)%3 ))
}

# main()

chLineBuffer[0]=""
chLineBuffer[1]=""
chLineBuffer[2]=""
iCnt=0

cat file | while read chLineBuffer[$iCnt] ; do
     if [ "${chLineBuffer[$iCnt]}" = "string_to_search" ] ; then
          pNextElement
          print - "The result is ${chLineBuffer[$iCnt]}"
     else
          pNextElement
     fi
done

I hope this helps.

bakunin
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Replacing a string in nth line

Hello All, How to replace a string in nth line of a file using sed or awk. For Ex: test.txt Line 1 : TEST1 TEST2 TEST3 Line 2 : TEST1 TEST2 TEST3 TEST4 Line 3 : TEST1 TEST2 TEST3 TEST5 Line 4 : TEST1 TEST2 TEST3 TEST6 Line 5 : TEST1 TEST2 TEST3 TEST7 i want to go to 4th line of a... (1 Reply)
Discussion started by: maxmave
1 Replies

2. Shell Programming and Scripting

save every line in log file with matched string

i have been doing this script to match every line in a current log file (access_log) with strings that i list from a path (consist of 100 of user's name ex: meggae ).. and then make a directory of every string from the text file (/path/meggae/) --->if it matched.. then print every line from the... (3 Replies)
Discussion started by: meggae
3 Replies

3. UNIX for Advanced & Expert Users

capture data from matched string/line

Hi, I have a query as follows : suppose I am matching a string in a file say "start from here" and I want to pick up 'n' number of lines () from the matched string. Is there any way to do that ? 1) going forward I want to do this for every match for the above string 2) or limit this to... (2 Replies)
Discussion started by: sumoka
2 Replies

4. Shell Programming and Scripting

Help required on joining one line above & below to the pattern matched string line.

Hi Experts, Help needed on joining one line above & below to the pattern matched string line. The input file, required output is mentioned below Input file ABCD DEFG5 42.0.1-63.38.31 KKKK iokl IP Connection Available ABCD DEFG5 42.0.1-63.38.31 ... (7 Replies)
Discussion started by: krao
7 Replies

5. Shell Programming and Scripting

Print only matched string instead of entire line

Hi, I have a file whose lines are something like Tchampionspsq^@~^@^^^A^@^@^@^A^A^Aÿð^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^?ð^@^@^@^@^@^@^@?ð^@^@^@^@^@^@pppsq^@~^@#@^@^@^@^@^@^Hw^H^@^@^@^K^@^@^@^@xp^At^@^FTtime2psq^@ ~^@^^^A^@^@^@^B^A I need to extract all words matching T*psq from the file. Thing is... (4 Replies)
Discussion started by: shekhar2010us
4 Replies

6. UNIX for Dummies Questions & Answers

Commenting a line matched with a specific string in a file

Hi, I would like to comment a line that matched a string "sreenivas" in a file without opening it. Thanks in advance. Regards, Sreenivas (3 Replies)
Discussion started by: raosr020
3 Replies

7. Shell Programming and Scripting

How to display when nth line match a pattern?

Hi All, I have sample of listing as following Database 2 entry: Database alias = PXRES Database name = PXRES Local database directory = /db2/data1/db2phnx Database release level = d.00 Comment ... (3 Replies)
Discussion started by: ckwan
3 Replies

8. Shell Programming and Scripting

Bash Command to Get Nth Line in a String?

hi i need to get the 3rd line in a string. actually, not sure if it's a string, list, array, or something else. I'm using grep to retrieve all the numbers in a string-- in the console, it displays as multiple lines: $ echo "Sink 0: reference = 0: 153% 1: 45%, real = 0: 62%" | grep -o * 0... (4 Replies)
Discussion started by: johnywhy
4 Replies

9. Shell Programming and Scripting

Printing string from last field of the nth line of file to start (or end) of each line (awk I think)

My file (the output of an experiment) starts off looking like this, _____________________________________________________________ Subjects incorporated to date: 001 Data file started on machine PKSHS260-05CP ********************************************************************** Subject 1,... (9 Replies)
Discussion started by: samonl
9 Replies

10. Shell Programming and Scripting

Delete after nth occurence of string in each line

Hello, Environment: I am under Ubuntu 18.04 bionic. I have an sql file consisting of 10K lines. Objective: What I am trying to attain is to remove everything coming after 2nd tab in each line. While searching for the answer, I found two answers and both gave expected result just for the first... (2 Replies)
Discussion started by: baris35
2 Replies
bfs(1)							      General Commands Manual							    bfs(1)

NAME
bfs - Scans files SYNOPSIS
bfs [-] file... The bfs command is a read-only line editor typically used to scan files. OPTIONS
Suppresses the display of file sizes. Normally, bfs displays the size in bytes of the file being scanned. DESCRIPTION
The bfs command is similar to the ed command, but has some additional subcommands and the ability to process much larger files. Input files can be up to 32K lines long, with up to 512 characters per line. The command bfs is usually more efficient than ed for scanning a file because the file is not copied to a buffer. It is useful for identifying appropriate lines at which to use the csplit command when dividing a large file into more manageable pieces for editing. If you enter the P subcommand, bfs prompts you with * (asterisk). You can turn off prompting by entering a P again. The command bfs dis- plays error messages only when prompting is turned on. Pattern Searches The bfs command supports all the address expressions described in ed(1). Regular expressions are covered in detail in grep(1). In addi- tion, you can instruct bfs to search forward or backward through the file with or without wraparound. If you specify a forward search with wraparound, bfs continues searching from the beginning of the file after it reaches the end of the file. If you specify a backward search with wraparound, it continues searching backward from the end of the file after it reaches the beginning. A search without wraparound stops at the beginning or end of the file. Specify the four types of searches as follows: Searches forward with wraparound for pattern. Searches backward with wraparound for pat- tern. Searches forward without wraparound for pattern. Searches backward without wraparound for pattern. The pattern matching routine of bfs differs somewhat from the one used by ed and includes additional features. Only lowercase letters a through z can be used, and all 26 marks are remembered. See ed(1) for information on mark names. SUBCOMMANDS
The e, g, v, k, n, p, q, w, = , !, and null subcommands operate the same as for ed. Subcommands such as --, +++-, +++=, -12, and +4p are accepted. Note that 1,10p and 1,10 both display the first 10 lines. The f subcommand displays only the name of the file being scanned; there are no remembered filenames. The w subcommand is independent of output diversion, truncation, or compression. See the xo, xt, and xc subcommands that follow. The following additional subcommands are available: Reads bfs subcommands from file. When bfs reaches the end of file or receives an INT signal or if an error occurs, bfs resumes scanning the file that contains the xf subcommand. The xf subcommands can be nested to a depth of 10. Sends further output from the p and null subcommands to the named file, which is created with read and write permission granted to all users. If you do not specify a file, bfs writes to standard output. Note that each redirection to a file creates the specified file, deleting an existing file if necessary. Positions a label in a subcommand file. The label is ended with a newline character. Spaces between the : (colon) and the start of the label are ignored. This subcommand can be used to insert comments into a subcommand file, since labels need not be referenced. Sets the current line to the line containing pattern and jumps to label in the current command file if pat- tern is matched within the designated range of lines. The jump fails under any of the following conditions: Either address1 or address2 is not between the first and last lines of the file. address2 is less than address1. The pattern does not match at least one line in the specified range, including the first and last lines. This subcommand is the only one that does not issue an error message on bad addresses, so it can be used before other subcommands are run to test whether addresses are bad. Note that the following subcommand is an unconditional jump: xb/^/label The xb subcommand is allowed only if it is read from a file or a pipe. If it is read from a pipe, only a downward jump is possible. Truncates output from the p and null subcommands to number characters. The default number is 255. Assigns the specified value to the variable named number (0 to 9). You can put one or more spaces between number and value. For example: xv5 100 xv6 1,100p assigns the value 100 to the variable 5 and the value 1,100p to the variable 6. To reference a variable, put a % (percent sign) in front of the variable name. Given the preceding assignments for variables 5 and 6, the following three subcommands each display the first 100 lines of a file: 1,%5p 1,%5 %6 To escape the special meaning of %, precede it with a (backslash). g/".*\%[cds]/p matches and lists lines containing printf variables (%c, %d, or %s). You can also use the xv subcommand to assign the first line of command output as the value of a variable. To do this, make the first character of value an ! (exclamation point), followed by the command name. For example, the following command line stores the first line of the file junk in the variable 5: xv5 !cat junk To escape the special meaning of ! as the first character of value, precede it with a (backslash). For example, the following command line stores the value !date in the variable 7: xv7 !date Tests the last saved exit value from a shell command and jumps to label in the current command file if the value is 0 (zero). Tests the last saved exit value from a shell command and jumps to label in the current command file if the value is not 0 (zero). Turns compressed output mode on or off. (Compressed output mode sup- presses empty lines and replaces multiple spaces and tabs with a single space.) If switch is 1, output from the p and null subcommands is compressed; if switch is 0 it is not. If you do not specify switch, the current value of switch reverses. Initially, switch is set to 0. SEE ALSO
Commands: csplit(1), ed(1), grep(1) Functions: regexp(3) bfs(1)
All times are GMT -4. The time now is 01:44 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy